package qc.common.core.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 渠成公用附件处理工具类，用于根据json字符串解析出附件列表
 *
 * @author QuCheng Tech
 * @since 2025/1/18
 */
public class QcAttachementsUtil {
    /***
     * 根据附件json字符串解析出文件列表
     *
     * @param jsonString 附件json字符串
     * @return qc.common.core.utils.QcAttachementFile[]
     * @author QuCheng Tech
     * @since 2025/1/18
     */
    public static QcAttachementFile[] resolve(String jsonString) {
        if (StringUtils.isNotBlank(jsonString)) {
            Object convertJsonObject = JSON.parse(jsonString);
            //json对象不为空，并且是json数组类型
            if (convertJsonObject != null && (convertJsonObject instanceof JSONArray)) {
                JSONArray jsonArray = (JSONArray) convertJsonObject;
                if (jsonArray != null && jsonArray.size() > 0x0) {
                    //遍历每个数组对象获取附件文件信息
                    List<QcAttachementFile> result = new ArrayList<>();

                    for (int i = 0; i < jsonArray.size(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        if (jsonObject != null) {
                            Integer id = jsonObject.getInteger("id");
                            String name = jsonObject.getString("name");
                            String type = jsonObject.getString("type");

                            if (id != null && id.intValue() > 0x0 && StringUtils.isNotBlank(name)) {
                                QcAttachementFile file = new QcAttachementFile();
                                file.setId(id.intValue());
                                file.setName(name);
                                file.setType(type);

                                result.add(file);
                            }
                        }
                    }

                    if (result.size() > 0x0)
                        return result.stream().toArray(QcAttachementFile[]::new);
                }
            }
        }

        return null;
    }
}
